import axios from 'axios';
import FileSaver from 'file-saver';
import errorCode from '@/utils/errorCode';
import { blobValidate } from '@/utils/honghu';
import { globalHeaders } from '@/utils/request';

const baseURL = import.meta.env.VITE_APP_BASE_API;
let downloadLoadingInstance;
export default {
	async oss (ossId) {
		const url = baseURL + '/resource/oss/download/' + ossId;
		downloadLoadingInstance = ElLoading.service({ text: '正在下载数据，请稍候', background: 'rgba(0, 0, 0, 0.7)' });
		try {
			const res = await axios({
				method: 'get',
				url: url,
				responseType: 'blob',
				headers: globalHeaders()
			});
			const isBlob = blobValidate(res.data);
			if (isBlob) {
				const blob = new Blob([res.data], { type: 'application/octet-stream' });
				FileSaver.saveAs(blob, decodeURIComponent(res.headers['download-filename']));
			} else {
				this.printErrMsg(res.data);
			}
			downloadLoadingInstance.close();
		} catch (r) {
			console.error(r);
			ElMessage.error('下载文件出现错误，请联系管理员！');
			downloadLoadingInstance.close();
		}
	},
	async zip (url, name) {
		url = baseURL + url;
		downloadLoadingInstance = ElLoading.service({ text: '正在下载数据，请稍候', background: 'rgba(0, 0, 0, 0.7)' });
		try {
			const res = await axios({
				method: 'get',
				url: url,
				responseType: 'blob',
				headers: globalHeaders()
			});
			const isBlob = blobValidate(res.data);
			if (isBlob) {
				const blob = new Blob([res.data], { type: 'application/zip' });
				FileSaver.saveAs(blob, name);
			} else {
				this.printErrMsg(res.data);
			}
			downloadLoadingInstance.close();
		} catch (r) {
			console.error(r);
			ElMessage.error('下载文件出现错误，请联系管理员！');
			downloadLoadingInstance.close();
		}
	},
	async printErrMsg (data) {
		const resText = await data.text();
		const rspObj = JSON.parse(resText);
		const errMsg = errorCode[rspObj.code] || rspObj.msg || errorCode['default'];
		ElMessage.error(errMsg);
	}
};
